/**
 * 更新聊天窗口展示
 * 逻辑：比对callRecordId，系统唯一流水记录，用callId怕呼叫中心出问题
 * @param {any[]} newRecords 推送的sessions
 * @param {any[]} activeChatArr 展示的卡片callRecordId，第一个为当前
 * @return {*}
 */
export function updateChatShow(newRecords: any[], activeChatArr: any[]) {
  const arr = [...activeChatArr];
  const len = arr.length;

  // 跟最新推送比对，保留推送中存在的元素，存入新的数组
  const newArr: any = [];
  if (len) {
    arr.forEach(item => {
      const index = newRecords.findIndex(v => v.callRecordId === item);
      if (index >= 0) {
        newArr.push(item);
      }
    });
  }

  const newLen = newArr.length;
  console.log('跟推送消息比对后,更新的展示数组', newArr);

  if (newLen === 0) {
    // 补充元素：根据newRecords，依次存入第一个和第二个元素（注意：newRecords可能为空，此时展示为空）
    newRecords[0] && newRecords[0].callRecordId && newArr.push(newRecords[0].callRecordId);
    newRecords[1] && newRecords[1].callRecordId && newArr.push(newRecords[1].callRecordId);
  }

  if (newLen === 1) {
    // 补充元素：需补充1个元素到队尾，供显示（注意newRecords可能只有1个元素，而且刚好是要展示的对象，此时不需要补充）
    let item = undefined;
    if (newArr[0] !== newRecords[0].callRecordId) {
      // 跟推送第一个不同，加入推送第一个元素
      item = newRecords[0]?.callRecordId;
    } else {
      // 跟推送第一个相同，判断推送是否有第二个元素，有则加入
      item = newRecords[1]?.callRecordId;
    }
    console.log('比对后***展示数组长度为1，需补充元素item', item);
    item && newArr.push(item);
  }

  console.log('newArr*****', newArr);
  return newArr;
}

// 测试用例
const activeChatArr: any[] = [5, 2];
const newRecords: any[] = [
  { callRecordId: 1 },
  // { callRecordId: 3 },
  // { callRecordId: 4 },
  // { callRecordId: 5 },
];
updateChatShow(newRecords, activeChatArr);
